home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_2 / uud < prev    next >
Internet Message Format  |  1995-03-31  |  18KB

  1. From: Jan Brittenson <bson@rice-chex.ai.mit.edu>
  2. Subject:  v03i009:  uud - a uudecoder v1.0b, Part01/01
  3. Newsgroups: comp.sources.hp48
  4. Followup-To: comp.sys.hp48
  5. Approved: spell@seq.uncwil.edu
  6.  
  7. Checksum: 3800185134 (verify with brik -cv)
  8. Submitted-by: Jan Brittenson <bson@rice-chex.ai.mit.edu>
  9. Posting-number: Volume 3, Issue 9
  10. Archive-name: uud/part01
  11.  
  12.  
  13. BEGIN_DOC uud.doc
  14.    This is a beta version of UUD, an HP-48 uudecoder. It is considered
  15. a test version since any bugs may have rather disastrous effects, and
  16. although I've tried to test and debug it thoroughly, new problems may
  17. surface under unusual conditions. This means that if losing any data
  18. is unacceptible, then you should probably refrain from using this
  19. program until some time has passed with no bug reports, at which point
  20. I will repost it as a non-beta version.
  21.  
  22. UUD is relatively simple to use:
  23.  
  24.     UUD
  25.         Uudecode the string in level one, replacing
  26.         it with the resulting object.
  27.  
  28.             string --> obj
  29.  
  30.  
  31.    Any kermit preamble (the familiar "HPHP48-X" sequence) is ignored,
  32. so it can be used to uudecode objects built on a development system
  33. without bothering to generate the kermit preamble, as well as those in
  34. binary HP-48 kermit format. Any preamble is simply skipped.
  35.  
  36.    The total memory usage is the size of the string plus the size of
  37. the resultant object, plus ten nybbles. Since the size of a uuencoded
  38. file is about 1.6 times that of a binary file, the largest decodable
  39. string is approximately the available memory divided by 2.6. For 24kB
  40. of free memory, this means roughly 9.5kB. The string can reside
  41. anywhere, while the result will be allocated in TEMPOB.
  42.  
  43.    The binary and source code is provided "as is," under the GNU
  44. General Public License. For more details on this, see the source code
  45. included below. As I post this, I notice the code may need some
  46. browsing, which I will take care of once any bugs are fixed.
  47.  
  48. Happy hacking!
  49.  
  50.                         -- Jan Brittenson
  51.                            bson@ai.mit.edu
  52.  
  53. END_DOC
  54.  
  55. UUD
  56. Size: 346 bytes
  57. Xsum: #7f25h
  58.  
  59. uuencoded:
  60.  
  61. BYTES: #7F25h 353.5
  62.  
  63. BEGIN_UU uud.uue
  64. begin 644 uud
  65. M2%!(4#0X+5B=+2#[& U T-D"S"V@$0 "08._>0:H"!0#810D&/A(&/G0UC?D
  66. M  "XRA%&49J38F5G:6Z2&;(A,!2H ZWXTF> G>P& G<6!'XWD9;7+>K)AH&O
  67. M&9#Z$ !7'A<>UQV7'5-(4$A2&:8A$)$8^/H!.80   $H< A!)0)G#6GI@:$?
  68. MT:*>K*P8^A"%;5N/+WT&^"EE, 2L ZW8R6[ FV&BC/%=!2,RP,%A(S+ W )4
  69. M 8 ?9 8!$'1^<10T086_>09!%U,Q$$9!AH&OA)$O?6%T5G ID)8?ZAF0 1QS
  70. M,16P)P<W \6-/10%0:Y>8<%/%A,@:T$,$S_@%C#8IXQQ($ -8<%?\Y1^#E  
  71. M8<%?\W0=I!,-:0(PH9 F !#Z<&)P7G!:<%8@A!48^H'LM("A#X@4&&J1:DXQ
  72. G&&J0:$$1%1 'P%$!<0 -#8WHN0)7^+4)LP]ZI$=G\N"&,"LQL!(#
  73.  
  74. end
  75. END_UU
  76.  
  77.  
  78. ASC encoded:
  79.  
  80. BEGIN_ASC uud.asc
  81. %%HP: T(1)A(D)F(.);
  82. "D9D202BF81D0040D9D20CCD20A1100201438FB97608A804130164142818F8481
  83. 9F0D6D734E00008BAC116415A93926567696E629912B1203418A30DA8F2D7608
  84. D9CE6020776140E77319697DD2AE9C6818FA9109AF010075E171E17DD179D135
  85. 84058425916A120119818FAF10934800001082078014522076D0969E181AF11D
  86. 2AE9CACA81AF0158D6B5F8F2D7608F92560340CA30DA8D9CE60CB9162AC81FD5
  87. 5032230C1C1632230CCD20451008F14660100147E71741431458FB9760147135
  88. 130164146818FA4819F2D716476507920969F1AE910910C13713510B72707330
  89. 5CD8D3415014EAE5161CF4613102B614C031F30E61038D7AC8170204D0161CF5
  90. 3F49E7E00500161CF53F47D14A31D09620031A09620001AF072607E507A50765
  91. 02485181AF18CE4B081AF0884181A619A6E41381A6098614115101700C151017
  92. 00D0D0D88E9B20758F5B903BF0A74A74762F0E6803B2130B213052F7"
  93. END_ASC
  94.  
  95.  O  /
  96.   \/
  97.   /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  98.  O  \
  99.  
  100. BEGIN_SRC uud.star
  101. ;; uud.star -- HP-48 uudecoder
  102.  
  103. ;;    UUD is not distributed by the Free Software Foundation. Do not
  104. ;; ask them for a copy or how to obtain new releases. Instead, send
  105. ;; e-mail to the address below. UUD is merely covered by the GNU
  106. ;; General Public License.
  107. ;;
  108. ;;    Please send your comments, ideas, and bug reports to
  109. ;; Jan Brittenson <bson@gnu.ai.mit.edu>
  110.  
  111.  
  112. ;;    Copyright (C) 1991 Jan Brittenson
  113. ;;
  114. ;;    UUD is free software; you can redistribute it and/or modify it
  115. ;; under the terms of the GNU General Public License as published by
  116. ;; the Free Software Foundation; either version 1, or (at your option)
  117. ;; any later version.
  118. ;;
  119. ;;    UUD is distributed in the hope that it will be useful, but
  120. ;; WITHOUT ANY WARRANTY; without even the implied warranty of
  121. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  122. ;; General Public License for more details.
  123. ;;
  124. ;;    This program is distributed without a copy of the GNU General
  125. ;; Public License; to obtain a copy, write to the Free Software
  126. ;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA, or send e-mail
  127. ;; to bson@gnu.ai.mit.edu.
  128.  
  129.  
  130. ;;    UUD is written in STAR assembler. The command line below
  131. ;; exemplifies how to build it:
  132. ;;
  133. ;;    star -j uud uud hp48 stdsyms uud
  134. ;;
  135. ;;    The file hp48.star, which contains macro definitions specific to
  136. ;; the HP-48, is included with the STAR distribution, obtainable by
  137. ;; anonymous FTP from ftp.ai.mit.edu, in pub/star-1.04.4.tar.Z. The
  138. ;; file stdsyms.star is a file containing entry point definitions for
  139. ;; the HP-48, although UUD does not rely heavily on ROM calls.
  140. ;;
  141. ;; Jan Brittenson
  142. ;; Boston, 25 November 1991
  143.  
  144.  
  145. ; Bugs/problems
  146. ;
  147. ; The file name is not extracted from the uu string. It could be
  148. ; returned in level 1 with the result in level 2 for easy storage.
  149. ; How often is the file name of interest? I don't know, since there
  150. ; hasn't been a uudecoder for the HP-48 out there yet. Things should
  151. ; become more clear once UUD has been in use for a while.
  152.  
  153.  
  154.     radix    0x10
  155.     header    `x'
  156.  
  157. ;; UUD
  158. ;;
  159. ;; In:
  160. ;;   1: uu.string
  161. ;;
  162. ;; Out:
  163. ;;   1: result.any
  164.  
  165.     rpl
  166.     Prg                ; PRG
  167.       Switch_on_argtype        ;    Switch on argument type
  168.       Short_3            ;    STR
  169.       Prg                ;    PRG
  170.     endrpl
  171.  
  172. ; Verify string format and calculate resulting size.
  173. ; In:
  174. ;    1: uu.string
  175. ;
  176. ;
  177. ; Out (if valid string)        (if invalid)
  178. ;    3: uu.string        2: uu.string
  179. ;    2: size.short        1: @#3a81
  180. ;    1: @#3ac0
  181. ;
  182.  
  183.     code
  184.  
  185. ; Get uu.string
  186.  
  187.     clr    p
  188.     move.a    @d1, a
  189.     call    save_regs        ; Save system registers
  190.     brz.a    a, $1077        ; End of stack - fail
  191.  
  192. ; Verify string is at least 14 characters
  193.  
  194.     move    a, d0
  195.     add    5, d0            ; D0 = &string size
  196.     move.a    @d0, a
  197.     sub.a    5, a
  198.     srb.a    a
  199.     move.a    a, c
  200.     move.a    c, d            ; D.A = string size, in bytes
  201.     move.p5    ^d14, c
  202.     brge.a    c, a, $1077        ; Too short - ignore request
  203.  
  204. ; Verify string starts with `begin'
  205.  
  206.     add    5, d0            ; D0 = &line 1
  207.     move.10    @d0, a
  208.     move.p10 `begin', c
  209.     move    9, p
  210.     breq.wp    c, a, $1001         ; Yup `begin' - sum up size
  211.  
  212. ; Fail
  213.  
  214. $1077:
  215.     clr    p
  216.     move.p5    true, c
  217.     move.a    c, a
  218.     call    restore_regs
  219.     jump    pushobj_a_rplret    ; Push @#3ac1 and continue
  220.  
  221.  
  222. ; D0 points to string data - sum up reulting string size. D.A contains
  223. ; the size of the remainer. R1.A holds the sum. Also decode the first
  224. ; 24 bits and see if they are `HPHP48-' - if so, adjust size by 16 nybbles.
  225.  
  226. $1001:
  227.     clr    p
  228.     call    next_record        ; Advance to first line
  229.     brcs    $1077            ; Uh... end of string?
  230.     call    decode_char        ; Decode record size
  231.     brz.b    b, $1077        ; Null file - no can do, man!
  232.     
  233.     clr.a    c
  234.     move.b    b, c            ; C.A = record size
  235.     slb.a    c            ; In nybbles
  236.     sub.a    ^d10, c            ; Less 10
  237.     move    c, r1            ; R1.A = first record size - 10
  238.  
  239.     clr.w    a
  240.     move    a, r0            ; Assume no inhibition count
  241.     call    uud_incrchar        ; 6 bits
  242.     call    uud_incrchar        ; 12 bits
  243.     call    uud_incrchar        ; 18 bits
  244.     call    uud_incrchar        ; 24 bits
  245.  
  246.     move.p6    `HPH', c        ; Really only need to check first
  247.                     ; 3 bytes, since "HPH" is not a
  248.                     ; valid prologue.
  249.     move    5, p
  250.     brne.wp    c, a, $1102        ; Nope preamble - ignore
  251.  
  252.     clr    p
  253.     move    r1, c
  254.     sub.a    ^d16, c            ; Reduce size by 16
  255.     move    c, r1
  256.     move.p5    ^d8, c            ; Preamble size 8 bytes
  257.     move    c, r0
  258. $1102:
  259.     clr    p
  260. $1100:
  261.     call    next_record        ; Advance to next line
  262.     brcs    $10770            ; Uh... end of string?
  263.  
  264.     clr    p
  265.     call    decode_char        ; B.B = uud(@D0+)
  266.     brz.b    b, $1109        ; Last record - done
  267.  
  268.     move.a    r1, a            ; A.A = sum
  269.     clr.a    c
  270.     move.b    b, c            ; C.A = record size
  271.     add.a    c, a            ; A.A = new sum
  272.     add.a    c, a            ; ...in nybbles
  273.     move.a    a, r1            ; R0.A = new sum
  274.     brcc    $1100            ; Loop
  275.  
  276. $10770:
  277.     jump    $1077
  278.  
  279. ; Successful completion. Push size in R0.A, @#3ac0 and continue.
  280.  
  281. $1109:
  282.     call    restore_regs        ; Restore RPL registers
  283.     call    pushshort_r0r1        ; Push preamble and result 
  284.                     ; size as shorts
  285.     move.p5    false, c
  286.     move.a    c, a
  287.     jump    pushobj_a_rplret    ; Push @#3ac0 and continue
  288.  
  289.     endcode
  290.  
  291.  
  292. ; Allocate target
  293.  
  294.     rpl
  295.          If_true_then
  296.            Error_bad_arg_value
  297.          Nullstring, Swap, Realloc, Swap
  298.     endrpl
  299.  
  300.  
  301. ; Decode object
  302. ;
  303. ; In:
  304. ;   3: uu.string
  305. ;   2: result.string        (in TEMPOB)
  306. ;   1: preamble-size.short
  307. ;
  308. ; Out:
  309. ;   1: result.any
  310. ;
  311.  
  312.     code
  313.  
  314.     call    getshort        ; A.A = preamble size
  315.     move    a, r0            ; R0.A = preamble size
  316.  
  317.     move.a    @d1, c            ; C.A = &result area
  318.     inc.a    d
  319.     add    5, d1
  320.  
  321.     move.a    @d1, a            ; A.A = &uu.string
  322.     move.a    c, @d1            ; Replace with result
  323.  
  324.     call    save_regs        ; Save RPL registers
  325.     move.a    @d1, c            ; C.A = &result area
  326.  
  327.     move    c, d1            ; D1 = &result area
  328.     move    a, d0            ; D0 = &uu.string
  329.     add    5, d0
  330.     move.a    @d0, c            ; C.A = uu.string size, in nybbles
  331.     sub.a    5, c
  332.     srb.a    c            ; (size-5)/2
  333.     move.a    c, d            ; D.A = uu.string size, in bytes
  334.     add    5, d0            ; Advance D0 to uu.string data
  335.  
  336.     call    next_record        ; Advance D0 to next record
  337.  
  338.  
  339. ; Main uudecode loop. At this point:
  340. ;
  341. ;  D0 = address of first record
  342. ;  D1 = address of string object (to be overwritten)
  343. ;  D.A= string character count
  344. ;  R0.A= # of bytes of prologue to skip
  345.  
  346. uud_main:
  347.     call    decode_char        ; B.B = size (0-63) from @D0+
  348.     brz.b    b, uud_finish        ; Null record - done, skip rest
  349.     move.b    b, c
  350.     move    c, r1            ; R1.A = Store limit
  351.     move    c, r4            ; R4.B = record byte count
  352.     swap    c, d1
  353.     move    c, d1
  354.     move    c, r3            ; R3.A = original destination address
  355.     call    decode_record        ; Decode record, @D0+ --> @D1+
  356.  
  357. ; Advance D0 to next record and loop
  358.  
  359.     call    next_record
  360.     brcc    uud_main        ; Decode next record
  361.  
  362.  
  363. ; We're done processing. Simply return, since the result object replaces
  364. ; the uu.string object.
  365.  
  366. uud_finish:
  367.     jump    rr_rplcont
  368.  
  369.  
  370. ;;
  371. ;; Decode character.
  372. ;; In:
  373. ;;    D0 = address of character
  374. ;;    D.A= characters left in string
  375. ;;
  376. ;; Out:
  377. ;;    B.B= 6-bit character code
  378. ;;    D.A= decremented, exit if zero
  379. ;;    Carry= clear
  380. ;;
  381. ;; Used:
  382. ;;    C.B
  383. ;;
  384.  
  385. decode_char:
  386.     move.b    @d0, c    
  387.     move.b    c, b            ; B.B = next character
  388.     add    2, d0            ; Advance to next character
  389.     dec.a    d
  390.     brcs    uud_error        ; Nothing left - error
  391.     move.p2    ` ', c            ; Offset
  392.     sub.b    c, b            ; Subtract offset
  393.     brcs    uud_error        ; Unprintable - error
  394.     move.p2    077, c
  395.     and.b    c, b            ; Clear bits 6 and 7 of character
  396.     retclrc
  397.  
  398.  
  399. ; Error, bad string
  400.  
  401. uud_error:
  402.     jump    Error_bad_arg_value+5
  403.  
  404.  
  405. ;;
  406. ;; Advance to beginning of next record. First advance to CR/LF,
  407. ;; then advance until non-CR/LF.
  408. ;; In:
  409. ;;    D0 = character pointer
  410. ;;    D.A= characters left in string
  411. ;;
  412. ;; Out:
  413. ;;    D0 = address of first char of next record
  414. ;;    D.A= characters left in string
  415. ;;    Carry = clear
  416. ;;
  417. ;; Used:
  418. ;;    C.B, A.B
  419. ;;
  420.  
  421. next_record:
  422. $2:
  423.     call    crlf_p            ; Do we have CR or LF?
  424.     brcs    $1            ; Yes - go skip CR and LFs
  425.     add    2, d0            ; Advance to next char
  426.     dec.a    d            ; One char less in string
  427.     brcc    $2
  428.     brcs    uud_error        ; Premature end of string
  429. $1:
  430.     call    crlf_p            ; Do we have CR or LF?
  431.     retcc                ; No - return
  432.     add    2, d0            ; Skip it
  433.     dec.a    d            ; One char less in string
  434.     brcc    $1
  435.     brcs    uud_error        ; Premature end of string
  436.  
  437.  
  438. ; Test if character @D0 is CR or LF
  439.  
  440. crlf_p:
  441.     move.b    @d0, a
  442.     move.p2    CR, c
  443.     reteq.b    c, a            ; Return with carry set if CR
  444.     move.p2    LF, c
  445.     reteq.b    c, a            ; Return with carry set if LF
  446.     ret                ; Otherwise, return with carry clear
  447.  
  448.  
  449. ;;
  450. ;; Decode record.
  451. ;; In:
  452. ;;     D0  = address of first char in record
  453. ;;    D1  = address of destination byte buffer
  454. ;;    D.A = number of characters left in string
  455. ;;    R0.A= number of bytes of prologue to skip
  456. ;;    R1.A= number of bytes to really decode
  457. ;;
  458. ;; Out:
  459. ;;    D0  = address of first char following record (CR/LF)
  460. ;;    D1  = address of first byte following the last one added (including
  461. ;;          pad bytes)
  462. ;;    D.A = number of characters left in string, adjusted
  463. ;;    Carry = clear
  464. ;;
  465. ;; Used:
  466. ;;    A, B, C
  467. ;;
  468.  
  469. decode_record:
  470.     clr.w    a
  471.     call    uud_incrchar        ; 6 bits
  472.     call    uud_incrchar        ; 12 bits
  473.     call    uud_incrchar        ; 18 bits
  474.     call    uud_incrchar        ; 24 bits
  475.  
  476. ; At this point, the 3 bytes are in A.6, in reverse order, i.e.
  477. ; the third byte is in A.B.
  478.  
  479.     move    4, p            ; Nybbles 4,5 is byte 1
  480. $1:
  481.     setb    1, st
  482.     move.a    r0, c
  483.     dec.a    c            ; One less preamble byte to go
  484.     brcs    $101
  485.     move.a    c, r0
  486.     clrb    1, st
  487. $101:
  488.     move.b    r1, c
  489.     dec.b    c            ; One less byte to copy
  490.     brcs    $171            ; End of copy - return
  491.     move.b    c, r1
  492.     brbc    1, st, $71
  493. $102:
  494.     move.p    a, @d1            ; Add low nybble of byte
  495.     inc    d1
  496.     inc    p
  497.     move.p    a, @d1            ; Add high nybble of byte
  498.     inc    d1
  499.     dec    p            ; Move P to low nyb of next byte
  500. $71:
  501.     dec    p
  502.     dec    p
  503.     brne    p, ^d14, $1        ; Loop bytes until P wraps
  504.  
  505.     clr    p
  506.     call    crlf_p            ; CR or LF?
  507.     brcc    decode_record        ; No - decode another 24 bits
  508. $171:
  509.     retclrc
  510.  
  511. ; Add 6 bits of uu-encoded data to the 6 low-order bits of A.W
  512.  
  513. uud_incrchar:
  514.     sln.w    a            ; Shift A left 6 bits
  515.     slb.w    a
  516.     slb.w    a
  517.  
  518.     call    decode_char        ; Get 6 bits of data in B.B
  519.     or.b    b, a            ; Add to A
  520.     retclrc
  521.  
  522.     even
  523.  
  524.     endcode
  525.  
  526.  
  527. ; Tail end of RPL program object
  528.  
  529.     rpl
  530.        EndObj            ;    PRG
  531.     EndObj                ; PRG
  532.     endrpl
  533.  
  534. END_SRC
  535.  
  536.  O  /
  537.   \/
  538.   /\  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  539.  O  \
  540.  
  541. BEGIN_SRC stdsyms.star
  542. ;; stdsyms.star -- Common Symbols
  543. ;;
  544. ;; This file is in the public domain. Please notice that
  545. ;; uud.star is not.
  546. ;;
  547. ;; Jan Brittenson
  548. ;; Boston, 25 November 1991
  549. ;;
  550.  
  551.  
  552.     nlistblock
  553.  
  554.     radix    0x10
  555.  
  556. GROB_null = 505b2
  557. OpenIO = 2eb37
  558. CloseIO = 315c6
  559. Freeze = 142fb
  560. Cllcd = 5046a
  561. Eval_prev_context = 6fd1
  562. Push_next = 6e97
  563. Char_000 = 6541e
  564. Add_string_char = 52ee
  565. Add5 = 6258a
  566. Inc = 3def
  567. Dup_Inc = 628eb
  568. Short_200h = 64f0e
  569. Short_100h = 64e32
  570. Short_60h = 64c8e
  571. Short_c0h = 64dd8
  572. Short_bbh = 64dce
  573. Short_31h = 64b44
  574. String_to_grob_pitch8 = 11d00
  575. Nullstring = 55df
  576. Nullstring_copy = 1613f
  577. Program_null = 40788
  578. Realloc = 61c1c
  579. Num = 1410f
  580. Add = 3dbc
  581. Add_string_string = 5193
  582. LeftLess1_string_short = 63259
  583. ArrayTo_array = 1d0ab
  584. ArrayTo = 1d0ab
  585. Dec = 3e0e
  586. Dup = 3188
  587. EndObj = 312b
  588. Equalp = 3d19
  589. Nonzerop = 3cc7
  590. No_args = 18a15
  591. Zerop = 3ca6
  592. Dup_Zerop = 62266
  593. Get_2Lastlocal = 613e7
  594. Get_3lastlocal = 6140e
  595. Get_4lastlocal = 61438
  596. Get_lastlocal = 613b6
  597. If_then_else = 61ad8
  598. If_true_then = 619bc
  599. If_not_true_then = 712a
  600. ;If_true_then = 619ad
  601. Dup_If_zero_then_exec = 618a8
  602. If_User_flag_then_else = 63ed9
  603. Pview_short_short = 4f052
  604. Listob = 2a74
  605. ListAlgPrgTo = 54af
  606. ListTo = 54af
  607. ListTo_StoreLocals = 74d0
  608. Local_M = 0xe4c1
  609. Local_N = 0xe4ae
  610. Local_S = 41bea
  611. Mul = 3ec2
  612. Mul2 = 3e6f
  613. Mul_array_real = 362dc
  614. Next = 7334
  615. Prg = 2d9d
  616. True = 3a81
  617. False = 3ac0
  618. Bin_to_short = 5a03
  619. Two_Bins_to_shorts = 4f3d1
  620. Real_to_short = 18cea
  621. Real_to_short_Swap = 62e7b
  622. Swap_Over = 61380
  623. Roll = 3325
  624. Drop = 3244
  625. Swap_Drop = 60f9b
  626. Drop2 = 3258
  627. Xlib_to_Rpl = 7e99
  628. Error_Bad_arg_type = 18cb2
  629. Short_0bh = 405d
  630. Clear_lastargs = 4d33
  631. Reset_lastargs = 53842
  632. Need_2_args = 18a8d
  633. Need_4_args = 18b9f
  634. SL_Need_1_arg = 18aa5
  635. Switch_on_argtype = 18fb2
  636. SL_Switch_2_argtypes = 18edf
  637. SL_Switch_on_argtype = 18ece
  638. SL_Switch_4_argtypes = 18f01
  639. SaveLast_Need_1_arg = 18aa5
  640. Lastkey = 4714
  641. Short_0 = 3fef
  642. Short_1 = 3ff9
  643. Short_2 = 4003
  644. Short_3 = 400d
  645. Short_4 = 4017
  646. Short_5 = 4021
  647. Short_8 = 403f
  648. Short_0dh = 4071
  649. Short_0fh = 4085
  650. Short_10h = 408f
  651. Short_16h = 40cb
  652. Short_1fh = 4125
  653. Short_20h = 412f
  654. Short_21h = 4139
  655. Short_40h = 64bda
  656. Short_7fh = 1cd16
  657. Short_83h = 64d24
  658. Pdim = 4b323
  659. Equal2p = 6229a
  660. Real_1 = 2a2c9
  661. Real_2 = 2a2de
  662. Real_3 = 2a2f3
  663. Real_4 = 2a308
  664. Real_5 = 2a31d
  665. Real_7 = 2a347
  666. Short_to_real = 18dbf
  667. Start_1_to_N = 73db
  668. Store_2lastlocal = 615f0
  669. Store_3lastlocal = 61600
  670. Store_4lastlocal = 61610
  671. Store_lastlocal = 615e0
  672. Store_local = 61625
  673. Swap = 3223
  674. Array_dims = 35a9
  675. ToArray_real = 1d02c
  676. ToArray_list = 1d040
  677. Size_list = 567b
  678. ToList = 5459
  679. ToList2 = 631b9
  680. TwoShorts_to_reals = 1950b
  681. TwoReals_to_shorts = 194f7
  682. Short_to_bin = 59cc
  683. Swap_Over = 61380
  684. Over = 32c2
  685. Rot = 3295
  686. Rolld3 = 60fac
  687. Rolld4 = 6109e
  688. Div2 = 3e8e
  689. Div = 3ef7
  690. Disp_any_real = 140ab
  691. Disp_pitch8Str_line0 = 1245b
  692. Disp_pitch8Str_line1 = 1246b
  693. Disp_pitch8str_line2 = 1247b
  694. Disp_pitch8str_line3 = 1248b
  695. Disp_pitch8str_line4 = 1249b
  696. Disp_pitch8str_line5 = 124ab
  697. Disp_pitch8str_line6 = 124bb
  698. Disp_pitch8str_line7 = 124cb
  699.  
  700. Loop = 71a2
  701. Exit_loop = 71e5
  702. Until = 71c8
  703. Next = 7334
  704. If_ATTN_then_FlushKbd_Kill = 4243e
  705. If_ATTN_then_End = 4245c
  706. Pr1 = 318fe
  707. Error_bad_arg_value = 18ca2
  708. If_not_equal_then_short = 6336c
  709.  
  710. ;; ML routines
  711.  
  712. getshort = 6641
  713. get2shorts = 3f5d
  714. pushshort_r0r1 = 6529
  715. pushshort_r0 = 6537
  716. pushshort_r0_rplret= 18d0a
  717. pushobj_a = 54266
  718. pushobj_a_rplret = 6ec9
  719. stralloc_nibbles = 5b7d
  720. blkcopy = 670c
  721. save_regs = 679b
  722. restore_regs = 67d2
  723. rplcont = 71be
  724. rr_rplcont = 5143
  725. kbflush = 0xd57
  726. keybuf = 704ea
  727. indicate_not_busy = 42359
  728. int_mask = 10e
  729. uart_xmit = 116
  730. adjust_parity = 3113d
  731. uart_xmit_rdy_p = 310ca
  732. recv_getc = 31289
  733.  
  734. ATTN_p = 4988
  735. clear_ATTN = 0xd8e
  736.  
  737. graph_grob_ptr = 70565
  738. stack_grob_ptr = 70556
  739.  
  740. Copyright = ch^^d169
  741. Beta = ch^^d223
  742. CR = ch^015
  743. LF = ch^012
  744. END_SRC
  745.                         -- Jan Brittenson
  746.                            bson@ai.mit.edu
  747.  
  748.